﻿<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package		app.Controller
 * @link		http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 */
class AppController extends Controller {

    public $uses = array('Usuario');
    public $components = array(
        'Session',
        'Cookie',
        'Auth' => array(
            'loginAction' => array(
                'controller' => 'usuarios',
                'action' => 'login',
            ),
            'authError' => 'Você não está autorizado a acessar esta página.',
            'loginRedirect' => array('controller' => 'usuarios', 'action' => 'listAll'),
            'logoutRedirect' => array('controller' => 'produtos', 'action' => 'search'),
            'authorize' => array('Controller')
        )
    );
    public $helpers = array(
        'Html' => array('className' => 'BootstrapHtml'),
        'Form' => array('className' => 'BootstrapForm'),
        'Paginator' => array('className' => 'BootstrapPaginator')
    );

    public function isAuthorized($user) {
        if ($user['cargo'] === 'admin') { //permissão de super usuario
            return true;
        } else {
            return false;
        }
    }

    public function beforeRender() {
        $user = $this->Auth->user();
        if(isset($user)){
        if ($user['cargo'] != 'admin') { //funcionario
            $this->loadModel('ProdutoReserva');
            $this->set('numero_reservas', $this->ProdutoReserva->find('count', array(
                        'fields' => array('reservas.*, produtos.quantidade'),
                        'joins' => array(
                            array(
                                'table' => 'reservas',
                                'alias' => 'reservas',
                                'type' => 'INNER',
                                'foreignKey' => 'reserva_id',
                                'conditions' => array(
                                    'reservas.id = ProdutoReserva.reserva_id')
                            ),
                            array(
                                'table' => 'produtos',
                                'alias' => 'produtos',
                                'type' => 'INNER',
                                'foreignKey' => 'produto_id',
                                'conditions' => array(
                                    'produtos.id = ProdutoReserva.produto_id')
                            ),
                            array(
                                'table' => 'usuarios',
                                'alias' => 'usuarios',
                                'type' => 'INNER',
//                                'foreignKey' => 'produto_',
                                'conditions' => array(
                                    'produtos.laboratorio_id = usuarios.laboratorio_id',
                                    'usuarios.id = ' . $user['id'] . '')
                            ),
                        ),
                        'conditions' => array('reservas.aprovada != 1')
            )));
        } else { //admin
            if ($user['cargo'] == 'admin') {
                $this->loadModel('ProdutoReserva');
                $this->set('numero_reservas', $this->ProdutoReserva->find('count', array(
                            'fields' => array('reservas.*, produtos.quantidade'),
                            'joins' => array(
                                array(
                                    'table' => 'reservas',
                                    'alias' => 'reservas',
                                    'type' => 'INNER',
                                    'foreignKey' => 'reserva_id',
                                  
                                    'conditions' => array(
                                        'reservas.id = ProdutoReserva.reserva_id')
                                ),
                                array(
                                    'table' => 'produtos',
                                    'alias' => 'produtos',
                                    'type' => 'INNER',
                                    'foreignKey' => 'produto_id',
                                    'conditions' => array(
                                        'produtos.id = ProdutoReserva.produto_id')
                                ),
                            ),
                            'conditions' => array('reservas.aprovada != 1')
                )));
            }
        }
    }
    }

    public function beforeFilter() {
        $this->Cookie->time = '1 hour';  // or '1 hour'
        $this->Cookie->key = 'AS()XA(S*D)AS8dA(Sd80A(SDA*SDAS%D4$AS#SD@ASDtyASGH)_AS0dAoIASNKAasdwdqFA$#S21d24a3s45dAS$3d#A@$SDASCASD31%$ˆ$%$#s253$AS5#Â$%s645$#AS@%#AˆS6%A&*SÂ%S$';
        $this->Cookie->httpOnly = true;

        $this->Auth->authenticate = array('Form');
        $this->Auth->fields = array(
            'usuario' => 'usuario',
            'senha' => 'senha'
        );
        $this->Auth->loginRedirect = array('action' => 'search', 'controller' => 'produtos');
        $this->Auth->logoutRedirect = array('action' => 'index', 'controller' => 'usuarios');
        $this->Auth->authError = __('Você não está autorizado para acessar esta página');
        $this->Auth->authorize = 'Controller';
        # Login pelo cookie
        if (!$this->Auth->loggedIn() && $this->Cookie->check('Auth.User')) {
            $cookie = $this->Cookie->read('Auth.user');
            $usuario = $this->Usuario->find('first', array(
                'conditions' => array(
                    'Usuario.usuario' => $cookie['usuario'],
                    'Usuario.senha' => $cookie['senha']
                )
                    )
            );
            # Login pelo formulario
            if ($this->Auth->login($usuario['Usuario'])) {
                $this->redirect('/produtos/index');
            }

            # Redireciona para pagina inicial de usuario se estiver logado
            if ($this->Auth->loggedIn() && $this->params->controller == 'usuarios' && $this->params->action == 'login')
                $this->redirect('/produtos/index');
        }
    }

}

